// utils/request.js
// Axios请求封装

// 创建axios实例
const service = axios.create({
    baseURL: 'http://localhost:8080/api', // 后端API基础路径
    timeout: 10000, // 请求超时时间
    headers: {
        'Content-Type': 'application/json;charset=utf-8'
    }
});

/**
 * 请求拦截器
 * 在发送请求前进行一些处理
 */
service.interceptors.request.use(config => {
    // 1. 获取Token
    const token = localStorage.getItem('token');

    // 2. 如果存在Token，添加到请求头
    if (token) {
        config.headers['Authorization'] = `Bearer ${token}`;
    }

    return config;
}, error => {
    // 请求错误处理
    console.error('请求拦截器错误:', error);
    return Promise.reject(error);
});

/**
 * 响应拦截器
 * 对响应数据进行处理
 */
service.interceptors.response.use(response => {
    // 1. 获取响应数据
    const res = response.data;

    // 2. 成功状态（假设后端返回code=200表示成功）
    if (res.code === 200) {
        // 直接返回data部分（去除外层包装）
        return res.data;
    }

    // 3. 业务错误（如参数错误）
    if (res.code >= 400 && res.code < 500) {
        alert(`请求失败: ${res.msg}`);
        return Promise.reject(new Error(res.msg || 'Error'));
    }

    // 4. 未认证或Token过期
    if (res.code === 401) {
        alert('登录已过期，请重新登录');
        localStorage.removeItem('token');
        localStorage.removeItem('role');
        window.location.href = '/login';
        return Promise.reject(new Error('Unauthorized'));
    }

    // 5. 其他错误
    alert(`系统错误: ${res.msg}`);
    return Promise.reject(new Error(res.msg || 'Error'));
}, error => {
    // 网络错误处理
    console.error('网络错误:', error);
    alert('网络请求失败，请检查网络连接');
    return Promise.reject(error);
});

// 将service挂载到Vue原型，方便组件访问
const app = Vue.createApp({});
app.config.globalProperties.$request = service;
